/*
Crossing the Line: Evidence for the categorization theory of spatial voting

REPLICATION FILE FOR SUPPLEMENTARY INFORMATION

APRIL 19, 2023
*/

cd ["enter path to files here"]
*SI 3: Balance Tests
*US Balance test
clear
use "RP US Supp data.dta"
logit treatment ABS_distanceB_centre age i.gender i.race i.educ i.ideo5 i.region i.votereg if Q2b~=997 & (Q1>52 | Q1<48)
coefplot, drop(_cons) xline(0) scale(0.6)  

*British Balance test
clear
use "RP Britain Supp data.dta"
logit treatment ABS_distanceB_centre Age i.Newspaper_readership i.Gender i.SocialGrade i.Education_age i.Region2 if Q2b~=997 & (Q1>52 | Q1<48)
coefplot, drop(_cons) xline(0) scale(0.6)  


*SI 4: Strength of Vote Norm by Strength of Identity
**US Norm Strength by Ideological Placement 
clear
use "RP US Supp data.dta"
serrbar norm1_diff_2 norm1_effect_se_2 ideol_group_2 if  ideol_group_2>=57 |  ideol_group_2<=43, scale(1.645) xtitle(Ideological Placement) ytitle("Vote Expectation Effect") yline(0)

**Britain Norm Strength by Ideological Placement 
clear
use "RP Britain Supp data.dta"
serrbar norm1_diff norm1_effect_se ideol_group if  ideol_group>=57 |  ideol_group<=43, scale(1.645) xtitle(Ideological Placement) ytitle("Vote Expectation Effect")  yline(0)


*SI 5: Robustness Checks
**Control for Partisan Identity
clear
use "RP Britain data with parties.dta"
ttest Q4 if Q1~=997 & Q4~=997  & (Q1>52 | Q1<48) & Q4_timing >3 & Q1_timing >5, by(treatment)

**Effect of Hypothetical Party A
clear
use "RP Britain data without party A.dta"
reg Q4_v2 treatment if Q1~=997 & Q4_v2~=997  & (Q1>52 | Q1<48) & Q4v2_timing >3 & Q1_timing >5 

**British Testing Proximity voting
clear
use "RP Britain Supp data.dta"
reg Q2b ABS_distanceB if Q1~=997 & Q2b~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5 & treatment == 0

**British Testing directional voting
sum Q2a if (Q1>25 & Q1<75) & (Q1>52 | Q1<48) & Q1~=997 & Q2_timing >10 & Q1_timing >5 & treatment == 0
sum Q2b if (Q1>25 & Q1<75) & (Q1>52 | Q1<48) & Q1~=997 & Q2_timing >10 & Q1_timing >5 & treatment == 0

recode partyB (50.5 = 0.5) (49.5 = -0.5) (else = .) if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5, into(partyB_Dir)
gen partyA_Dir = partyA - 50 if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5


gen Q1_Dir = Q1 - 50 if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5

gen partyB_X_Ideol = partyB_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5
gen partyA_X_Ideol = partyA_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5

gen partyA_X_Ideol_vs_partyB_X_Ideol = partyA_X_Ideol - partyB_X_Ideol 
sum partyA_X_Ideol_vs_partyB_X_Ideol if (Q1>25 & Q1<75) & treatment == 0

display  (153.3811 - 135.8988)/401.9663

gen utility_Dir  = 0.04349195*partyB_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & (Q1>25 & Q1<75) & Q2_timing >10 & Q1_timing >5

ttest utility_Dir if Q1~=997 & (Q1>52 | Q1<48) & Q2_timing >10 & Q1_timing >5, by(treatment)

*US Test Proximity Effect
clear
use "RP US Supp data.dta"
reg Q2b ABS_distanceB if Q1~=997 & Q2b~=997  & (Q1>57 | Q1<43) & page2_timing >10 & page1_timing >5 & treatment==0 

*US Testing directional voting
sum Q2a if (Q1>25 & Q1<75) & (Q1>52 | Q1<48) & Q1~=997 & page2_timing >10 & page1_timing >5 & treatment == 0 & Q2b~=997 & Q2a~=997
sum Q2b if (Q1>25 & Q1<75) & (Q1>52 | Q1<48) & Q1~=997 & page2_timing >10 & page1_timing >5 & treatment == 0 & Q2a~=997 & Q2b~=997

recode partyB (50.5 = 0.5) (49.5 = -0.5) (else = .) if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5, into(partyB_Dir)
gen partyA_Dir = partyA - 50 if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5

gen Q1_Dir = Q1 - 50 if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5

gen partyB_X_Ideol = partyB_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5
gen partyA_X_Ideol = partyA_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5

gen partyA_X_Ideol_vs_partyB_X_Ideol = partyA_X_Ideol - partyB_X_Ideol 
sum partyA_X_Ideol_vs_partyB_X_Ideol if (Q1>25 & Q1<75) & treatment == 0 & Q2b~=997 & Q2a~=997

display  (67.35082  - 47.66557 )/ 415.7705

gen utility_Dir  = .04734643*partyB_Dir*Q1_Dir if Q1~=997 & (Q1>52 | Q1<48) & (Q1>25 & Q1<75) & page2_timing >10 & page1_timing >5 & Q2a~=997 & Q2b~=997

ttest utility_Dir if Q1~=997 & (Q1>52 | Q1<48) & page2_timing >10 & page1_timing >5, by(treatment)


*SI 6: Conflict by Norm Prime and Strength
clear
use "Britain data.dta"
stset Q4_timing 
streg c.conflict3##i.treatment C_count if (Q1<=48 | Q1>=52) & Q1!=997 & Q2_timing >10 & Q1_timing >5, dist(weib) time
estat ic

streg c.conflict3##c.norm1_diff_ind2##i.treatment C_count if (Q1<=48 | Q1>=52) & Q1!=997 & Q2_timing >10 & Q1_timing >5, dist(weib) time 
estat ic


*SI 8: Candidate Categorization Survey
use "RP CandidateCategorization.dta", clear 

generate PP = 1 if PolKnow==1 & ((Ideology<5 & PID<4) | (Ideology>5 & PID>4 & Ideology<11 & PID<8))
recode PP (.=0)
sum PP
sum PP if PID <8 & PID !=4

tab CandidateID if PP==1 & PID!=4 & PID<8
tab CandidateID if PP==1  & PID<4
tab CandidateID if PP==1 &  PID>4 & PID<8







